<?php  
class GoodsModel extends Model{
	public $table='goods';//商品表
	private $goodsAttr;//商品属性模型
	private $goodsGallery;//商品详情图片模型

	public function __init(){
		$this->goodsAttr=K('GoodsAttr');//商品属性模型
		$this->goodsGallery=K('GoodsGallery');//商品详情图片模型
	}
	/**
	 * 自动验证
	 * @var array
	 */
	public $validate=array(
		array('goods_name','nonull','商品名称不能为空',2,3)//商品名称必填
	);
	/**
	 * 自动处理
	 * @var array
	 */
	public $auto=array(
		//处理字段 ,方法, 默认值 ,字段为空时处理 ,添加编辑都进行处理
		array('is_hot','',0,4,3),//是否热销 为空时，设置为0
		array('is_new','',0,4,3),//是否新品 为空时，设置为0
		array('is_best','',0,4,3),//是否精品 为空时，设置为0
		array('sale_time','strtotime','function',2,3)//自动将时间转换为时间戳
	);
	/**
	 * 获取按分页显示的所有数据
	 * @return [array] [分页商品数据]
	 */
	public function getPageList(){
		//定义连表条件
		$join="__goods__ g  LEFT JOIN __category__ c ON g.category_cid=c.cid";

		//统计总数
		$count=M('goods')->join($join)->where('recycle <> 1')->count();

		//分页处理（总数，每页条数）
		$page=new Page($count,10);

		//按分页并按Gideon降序排序查询所有商品
		$goods=M('goods')->join($join)->order('gid desc')->where('recycle <> 1')->limit($page->limit())->all();

		//返回数据和分页（二维数组）
		return array('goods'=>$goods,'page'=>$page->show());
	}
	/**
	 * 添加商品
	 */
	public function addGoods(){
		if ($this->create()) {

			if ($goods_gid=$this->add()) {//添加成功返回主键
				 /**
                 * 如果货号为空时，更新货号
                 */
                $this->setGoodsSn($goods_gid);

				//压入主键
				$_POST['goods_gid']=$goods_gid;

				//添加商品副表数据
				M('goods_data')->add();

				//处理首页列表页图片
				$this->updateGoodsImg($goods_gid);

				//处理详情页图片（大中小图）
				$this->goodsGallery->addImage($goods_gid);
				
                //添加商品属性
               $this->goodsAttr->addAttr($goods_gid);

               return true;
			}
			$this->error="添加失败";
		}
	}
	/**
   * 设置货号
   * 商品没有添加货号时，系统自动设置货号
   * @param $gid
   */
	private function setGoodsSn($gid) {
	    if (empty($_POST['goods_sn'])) {
	        $goods_sn = 'zp_' . str_pad($gid, 6,0,STR_PAD_LEFT);
	        $data = array(
	            'gid' => $gid,
	            'goods_sn' => $goods_sn
	        );
	        M('goods')->save($data);
	    }
	}
	/**
	 * 添加商品首页图片和列表页图片（操作商品表）
	 * @param  [int] $gid [商品主键]
	 * @return [type]      [description]
	 */
	public function updateGoodsImg($gid){

		/**
		 * 没有图片上传或图片上传有错误时，不进行处理
		 */
		if($_FILES['original_img']['error']!=0)return;

		//如果有原图，先删除原图
		$this->delGoodsImg($gid);

		$upload=new Upload('Upload/goods/'.date('Y/m/d'));//实例化上传类，并设置图片储存位置
		$file=$upload->upload('original_img');//上传图片
		if(empty($file))return;//上传失败
		$file=$file[0];//多图上传为二位数组，这里单图，只取第一个
		$listImg=$file['dir'].$file['filename'].'_list_300x300.'.$file['ext'];//列表页图片(组合文件名)
		$indexImg=$file['dir'].$file['filename'].'_index_400x400.'.$file['ext'];//首页图片

		$image=new Image();//实例化图片类
		$image->thumb($file['path'],$listImg,300,300,6);
		$image->thumb($file['path'],$indexImg,400,400,6);
		$data=array(
			'gid'=>$gid,//主键
			'original_img'=>$file['path'],//原图
			'goods_img'=>$indexImg,//首页图
			'goods_thumb'=>$listImg//列表图
		);
		return M('goods')->save($data);//更新图片
	}
	/**
	 * 编辑商品
	 * @return [type] [description]
	 */
	public function editGoods(){
		if ($this->create()) {

			$gid=Q('gid',0,'intval');

			if ($this->save()) {
				/**
				 * 更新货号
				 */
				$this->setGoodsSn($gid);

				//更新商品副表数据
				M('goods_data')->where("goods_gid=$gid")->save();

				//处理首页列表页图片
				$this->updateGoodsImg($gid);

				//添加详情页图片 （有图片表主键）
				$this->goodsGallery->addImage($gid);

				//添加商品属性（有属性主键）
				$this->goodsAttr->addAttr($gid);

				return true;
			}else{
				$this->error="编辑失败";
			}
		}
	}
	/**
	 * 将商品放入回收站
	 * @return [type] [description]
	 */
	public function recycleGoods(){
		$gid=Q('gid',0,'intval');
		$data=array('gid'=>$gid,'recycle'=>1);
		if($this->save($data)){
			return true;
		}else{
			$this->error="放入回收站失败";
		}
	}
	/**
	 * 彻底删除商品
	 * 1.删除商品表图片 
	 * 2.删除详情页图片 
	 * 3.删除商品附表信息 
	 * 4.删除商品属性信息 
	 * 5.删除该商品下货品
	 * 6.删除该条商品
	 * @return [type] [description]
	 */
	public function delGoods(){
		$gid=Q('gid',0,'intval');
		//1.删除商品表图片
		$this->delGoodsImg($gid);

		//获取当前商品详情图片表信息
		$data=$this->goodsGallery->where("goods_gid=$gid")->all();
		foreach ($data as $d) {
			//2.删除详情页图片
			$this->goodsGallery->delImage($d['goods_gallery_id']);
		}

		//3.删除商品附表详细信息
		M("goods_data")->where("goods_gid=$gid")->del();

		//4.删除商品属性信息
		$this->goodsAttr->where("goods_gid=$gid")->del();

		//5.删除该商品下货品数据
		K("Product")->where("goods_gid=$gid")->del();

		//6.删除该条商品数据
		if ($this->del($gid)) {
			return true;
		}else{
			$this->error="删除失败";
		}
	}

	/**
	 * 删除商品表图片
	 * @param  [int] $gid [商品主键]
	 * @return [type]      [description]
	 */
	public function delGoodsImg($gid){
		//查找当前商品数据
		$data=$this->find($gid);
		//删除图片文件
		is_file($data['original_img']) and unlink($data['original_img']);//删除原图
		is_file($data['goods_img']) and unlink($data['goods_img']);//删除中图
		is_file($data['goods_thumb']) and unlink($data['goods_thumb']);//删除小图
		return true;
	}

	/**
	 * 异步更改是否上架
	 * @return [type] [description]
	 */
	public function updateSale(){
		// p($_POST);exit;
		if ($this->save()) {
			return true;
		}else{
			return false;
		}
	}
	/**
	 * 异步更改是否热销
	 * @return [type] [description]
	 */
	public function updateHot(){
		if ($this->save()) {
			return true;
		}else{
			return false;
		}
	}
	/**
	 * 异步更改是否新品
	 * @return [type] [description]
	 */
	public function updateNew(){
		if ($this->save()) {
			return true;
		}else{
			return false;
		}
	}
	/**
	 * 异步更改是否精品
	 * @return [type] [description]
	 */
	public function updateBest(){
		if ($this->save()) {
			return true;
		}else{
			return false;
		}
	}
}
?>